<Type Name="FileSystem" FullName="Mono.Fuse.FileSystem">
  <TypeSignature Language="C#" Value="public abstract class FileSystem : IDisposable" />
  <AssemblyInfo>
    <AssemblyName>Mono.Fuse</AssemblyName>
    <AssemblyVersion>0.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <ThreadingSafetyStatement>This type is safe for multithreaded operations.</ThreadingSafetyStatement>
  <Base>
    <BaseTypeName>System.Object</BaseTypeName>
  </Base>
  <Interfaces>
    <Interface>
      <InterfaceName>System.IDisposable</InterfaceName>
    </Interface>
  </Interfaces>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="protected FileSystem ();" />
      <MemberType>Constructor</MemberType>
      <Parameters />
      <Docs>
        <summary>
          Creates and initializes a new instance of the 
          <see cref="T:Mono.Fuse.FileSystem" /> class.
        </summary>
        <remarks>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="protected FileSystem (string mountPoint);" />
      <MemberType>Constructor</MemberType>
      <Parameters>
        <Parameter Name="mountPoint" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="mountPoint">
          A <see cref="T:System.String" /> containing the directory that should
          be mounted.
        </param>
        <summary>
          Creates and initializes a new instance of the 
          <see cref="T:Mono.Fuse.FileSystem" /> class for the specified
          mount point.
        </summary>
        <remarks>
          <para>
            This constructor initializes the 
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> property to
            <paramref name="mountPoint" />.
          </para>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="protected FileSystem (string[] args);" />
      <MemberType>Constructor</MemberType>
      <Parameters>
        <Parameter Name="args" Type="System.String[]" />
      </Parameters>
      <Docs>
        <param name="args">
          A <see cref="T:System.String" /> array containing FUSE arguments and 
          the mountpoint.
        </param>
        <summary>
          Creates and initializes a new instance of the 
          <see cref="T:Mono.Fuse.FileSystem" /> class using the specified arguments.
        </summary>
        <remarks>
          <para>
            This constructor is equivalent to calling the 
            <see cref="C:Mono.Fuse.FileSystem" /> constructor, calling
            <see cref="M:Mono.Fuse.FileSystem.ParseFuseArguments" /> with
            <paramref name="args" />, and setting 
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> to the last 
            array element in the array returned by <c>ParseFuseArguments</c>.
          </para>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="ParseFuseArguments">
      <MemberSignature Language="C#" Value="public string[] ParseFuseArguments (string[] args);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.String[]</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="args" Type="System.String[]" />
      </Parameters>
      <Docs>
        <param name="args">
          A <see cref="T:System.String" /> array containing the arguments to 
          initialize the FUSE library with.
        </param>
        <summary>
          Parses <paramref name="args" /> looking for FUSE options.
        </summary>
        <returns>
          A <see cref="T:System.String" /> array containing any unhandled 
          <paramref name="args" /> elements.
        </returns>
        <exception cref="T:System.ArgumentException">
          If <paramref name="args" /> contains a <c>-o</c> argument without 
          a following <c>string</c> or <c>string=value</c> argument.
        </exception>
        <remarks>
          <para>
            This method parses <paramref name="args" /> looking for 
            FUSE-formatted arguments.  A FUSE-formatted argument is one of:
          </para>
          <list type="bullet">
            <item>
              <term>
                <c>-d</c> to enable FUSE debug output.  This is also equivalent
              to <c>-odebug</c>.
            </term>
            </item>
            <item>
              <term>
                <c>-f</c> to enable foreground output.  This is the only 
              permitted behavior anyway, so it's simply ignored.
            </term>
            </item>
            <item>
              <term>
                <c>-s</c> to disable multithreading support within FUSE.
              By default multithreading is <paramref name="enabled" />.
              (See also <see cref="P:Mono.Fuse.FileSystem.MultiThreaded" />.)
            </term>
            </item>
            <item>
              <term>
              Any argument of the form <c>-ostring</c>, <c>-ostring=value</c>,
              and the argument pairs <c>-o string</c>, <c>-o string=value</c>.
              <paramref name="Any" /> argument or argument pair matching this
              pattern will be handled by <c>ParseFuseArguments</c>.
            </term>
            </item>
          </list>
          <para>
            This method initializes the 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> property to 
            contain the specified arguments.
          </para>
          <block subset="none" type="note">
            <para>
              If any non-FUSE arguments are captured by this method, they will 
              be stored in <see cref="P:Mono.Fuse.FileSystem.FuseOptions" />
              and provided to FUSE during the
              <see cref="M:Mono.Fuse.FileSystem.Start" /> method.  If any
              non-FUSE arguments are passed to FUSE, FUSE will report an error.
            </para>
            <para>
              <paramref name="Do not pass non-FUSE arguments to FUSE." />
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="ShowFuseHelp">
      <MemberSignature Language="C#" Value="public static void ShowFuseHelp (string appname);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="appname" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="appname">
          A <see cref="T:System.String" /> containing the program name to 
          display within the help text.
        </param>
        <summary>
          Writes FUSE argument information to your programs standard error stream.
        </summary>
        <remarks>
          <para>
            Use this method to show the FUSE arguments within your help information.
          </para>
        </remarks>
        <example>
          <para>
            <see cref="M:Mono.Fuse.FileSystem.ShowFuseHelp" /> should be 
            used to augment your help text generation when handling the 
            standard <c>--help</c> argument.
          </para>
          <code lang="C#">using System;
using Mono.Fuse;

class Help {
	public static void Main ()
	{
		FileSystem.ShowFuseHelp ("helpfs");
		Console.Error.WriteLine ("helpfs options:");
		Console.Error.WriteLine ("    --argument-name-here   Summary Information");
	}
}</code>
          <para>The above program generates the output:</para>
          <code lang="output">
usage: helpfs mountpoint [options]

general options:
    -o opt,[opt...]        mount options
    -h   --help            print help
    -V   --version         print version

FUSE options:
    -d   -o debug          enable debug output (implies -f)
    -f                     foreground operation
    -s                     disable multi-threaded operation

    -o allow_other         allow access to other users
    -o allow_root          allow access to root
    -o nonempty            allow mounts over non-empty file/dir
    -o default_permissions enable permission checking by kernel
    -o fsname=NAME         set filesystem name
    -o large_read          issue large read requests (2.4 only)
    -o max_read=N          set maximum size of read requests

    -o hard_remove         immediate removal (don't hide files)
    -o use_ino             let filesystem set inode numbers
    -o readdir_ino         try to fill in d_ino in readdir
    -o direct_io           use direct I/O
    -o kernel_cache        cache files in kernel
    -o umask=M             set file permissions (octal)
    -o uid=N               set file owner
    -o gid=N               set file group
    -o entry_timeout=T     cache timeout for names (1.0s)
    -o negative_timeout=T  cache timeout for deleted names (0.0s)
    -o attr_timeout=T      cache timeout for attributes (1.0s)

helpfs options:
    --argument-name-here   Summary Information</code>
        </example>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="public void Dispose ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          Cleans up FUSE resources.
        </summary>
        <remarks>
          <para>
            This method should be called when 
            <see cref="M:Mono.Fuse.FileSystem.Start" /> returns.
          </para>
          <para>
            If a subclass needs to cleanup its resources, it should override
            <see cref="M:Mono.Fuse.FileSystem.Dispose(System.Boolean)" />.
          </para>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="protected virtual void Dispose (bool disposing);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="disposing" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="disposing">
          A <see cref="T:System.Boolean" /> specifying whether this was called 
          as a result of an explicit 
          <see cref="M:Mono.Fuse.FileSystem.Dispose()" /> call instead of 
          through the finalizer.
        </param>
        <summary>
          Release resources associated with this instance.
        </summary>
        <remarks>
          <para>
            Subclasses should override this method if they need to release 
            resources during class cleanup.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overridding implementations <paramref name="must" />
              call the <see cref="T:Mono.Fuse.FileSystem" /> base method as
              part of their implementation so that 
              <see cref="T:Mono.Fuse.FileSystem" /> has a chance to cleanup 
              FUSE.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="Start">
      <MemberSignature Language="C#" Value="public void Start ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          Initializes FUSE and starts file system event processing.
        </summary>
        <exception cref="T:System.InvalidOperationException">
          <para>
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> is 
            <see langword="null" />.
          </para>
          <para>-or-</para>
          <para>
             A file operation "set" was not fully implemented.  Sets include:
          </para>
          <list type="bullet">
            <item>
              <term>
                <see cref="M:Mono.Fuse.FileSystem.OnOpenDirectory" /> and <see cref="M:Mono.Fuse.FileSystem.OnReleaseDirectory" />.</term>
            </item>
          </list>
        </exception>
        <exception cref="T:System.NotSupportedException">
          <para>
            There was an error initializing FUSE.  This is frequently 
            because the FUSE kernel module hasn't been loaded
            (try running <c>/sbin/modprobe fuse</c> as the root user)
            or <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> 
            could not be mounted (it's not empty or it's already mounted).
          </para>
          <para>
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> could not be 
            mounted.
          </para>
          <para>-or</para>
          <para>A new FUSE instance could not be created.</para>
        </exception>
        <remarks>
          <para>
            Creates a FUSE argument based on 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" />, initializes
            FUSE with these arguments, mounts the directory
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" />, and starts
            event processing.
          </para>
          <para>
            If <see cref="P:Mono.Fuse.FileSystem.MultiThreaded" /> is 
            <see langword="true" />, then FUSE will be allowed to invoke
            <see cref="T:Mono.Fuse.FileSystem" /> operations in a multithreaded
            manner.  Otherwise, only a single thread will be used to invoke
            FileSystem operations.
          </para>
          <para>
            This method will not return until 
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> is unmounted
            using the <c>fusermount</c> program or the
            <see cref="M:Mono.Fuse.FileSystem.Stop" /> method is invoked.
          </para>
        </remarks>
        <altmember cref="M:Mono.Fuse.FileSystem.Stop" />
      </Docs>
    </Member>
    <Member MemberName="Stop">
      <MemberSignature Language="C#" Value="public void Stop ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          Exits the FUSE event loop.
        </summary>
        <remarks>
          <para>
            This method can be invoked to cause the FUSE event loop to stop, 
            allowing <see cref="M:Mono.Fuse.FileSystem.Start" /> to return.
          </para>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="GetOperationContext">
      <MemberSignature Language="C#" Value="protected static Mono.Fuse.FileSystemOperationContext GetOperationContext ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Fuse.FileSystemOperationContext</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          Gets a <see cref="T:Mono.Fuse.FileSystemOperationContext" /> 
          instance containing additional contextual information for the current
           operation.
        </summary>
        <returns>
          A <see cref="T:Mono.Fuse.FileSystemOperationContext" /> instance
          containing conextual information for the current operation.
        </returns>
        <remarks>
          <para>
            This method should only be invoked from within an overridden method
            such as <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" />
            to retrieve additional contextual information for the current file
            system operation.
          </para>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnGetPathStatus">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnGetPathStatus (string path, out Mono.Unix.Native.Stat stat);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="stat" Type="Mono.Unix.Native.Stat&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="stat">
          A <see cref="T:Mono.Unix.Native.Stat" /> that will hold status
          information for <paramref name="path" />.
        </param>
        <summary>Get file or directory attributes.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the
pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOVERFLOW" />
                </term>
                <description>
                  <para>
                    The file size in bytes cannot be
                    represented correctly in the structure pointed to by
                    <paramref name="stat" /> .
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.stat" />.
            The <see cref="F:Mono.Unix.Native.Stat.st_dev" /> and 
            <see cref="F:Mono.Unix.Native.Stat.st_blksize" /> fields are
            ignored.
          </para>
          <para>
            The <see cref="F:Mono.Unix.Native.Stat.st_ino" /> field is ignored
            unless the <see cref="P:Mono.Fuse.FileSystem.SetsInodes" /> mount
            option is <see langword="true" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnReadSymbolicLink">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnReadSymbolicLink (string link, out string target);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="link" Type="System.String" />
        <Parameter Name="target" Type="System.String&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="link">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="target">
          A <see cref="T:System.String" /> reference which will be filled in
          to contain the target of the symbolic link <paramref name="link" />.
        </param>
        <summary>Read the target of a symbolic link.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    The named file is not a symbolic link.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from the file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Simiar to <see cref="M:Mono.Unix.Native.Syscall.readlink" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnCreateSpecialFile">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnCreateSpecialFile (string file, Mono.Unix.Native.FilePermissions perms, ulong dev);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="perms" Type="Mono.Unix.Native.FilePermissions" />
        <Parameter Name="dev" Type="System.UInt64" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="perms">
          A <see cref="T:Mono.Unix.Native.FilePermissions" /> instance
          containing the permissions of the file to create.
        </param>
        <param name="dev">
          If <paramref name="perms" /> is of the type 
          <see cref="F:Mono.Unix.Native.FilePermissions.S_IFCHR" /> or
          <see cref="F:Mono.Unix.Native.FilePermissions.S_IFBLK" /> thsn
          <paramref name="dev" /> is a 
          <see cref="T:System.UInt64" /> containing the major and minor
          numbers of the newly created device special file; otherwise,
          <paramref name="dev" /> is ignored.
        </param>
        <summary>Create a special or ordinary file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path prefix does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The process's effective user ID is not super-user.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making the directory entry or allocating the inode.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new node is being placed
                    cannot be extended because there is no space left on the file
                    system containing the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    There are no free inodes on the file system on which the
                    node is being created.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new node
                    is being placed cannot be extended because the
                    user's quota of disk blocks on the file system
                    containing the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The user's quota of inodes on the file system on
                    which the node is being created has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  <para>
                    The named file exists.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    Creating anything else than a block or character special
                    file (or a
                    <i>whiteout )</i>
                    is not supported.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Simiar to <see cref="M:Mono.Unix.Native.Syscall.mknod" />.
            This is the <see cref="M:Mono.Unix.Native.Syscall.mknod" />.
          </para>
          <para>
            This is called for the creation of all non-directory, non-symlink
            nodes unless <see cref="M:Mono.Fuse.FileSystem.OnCreateHandle" />
            is overridden.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnCreateDirectory">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnCreateDirectory (string directory, Mono.Unix.Native.FilePermissions mode);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="directory" Type="System.String" />
        <Parameter Name="mode" Type="Mono.Unix.Native.FilePermissions" />
      </Parameters>
      <Docs>
        <param name="directory">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="mode">
          A <see cref="T:Mono.Unix.Native.FilePermissions" /> instance
          containing the permissions of the directory to create.
        </param>
        <summary>Create a directory.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path prefix does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix,
                    or write permission is denied
                    on the parent directory of the directory to be created.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  <para>
                    The named file exists.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The new directory cannot be created because there is no space left
                    on the file system that will contain the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    There are no free inodes on the file system on which the
                    directory is being created.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The new directory cannot be created because the user's
                    quota of disk blocks on the file system that will
                    contain the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The user's quota of inodes on the file system on
                    which the directory is being created has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making the directory entry or allocating the inode.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnRemoveFile">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnRemoveFile (string file);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <summary>Remove a directory entry.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Write permission is denied on the directory containing the link
                    to be removed.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The named file is a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The named file has its immutable or append-only
                    flag set, see the
                    <see cref="M:Mono.Unix.Native.Syscall.chflags" />(2)
                    manual page for more information.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The directory containing the file is marked sticky,
                    and neither the containing directory nor the file to be removed
                    are owned by the effective user ID.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBUSY" />
                </term>
                <description>
                  <para>
                    The entry to be unlinked is the mount point for a
                    mounted file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while deleting the directory entry
                    or deallocating the inode.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.unlink" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnRemoveDirectory">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnRemoveDirectory (string directory);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="directory" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="directory">
          A <see cref="T:System.String" /> containing the directory to remove.
        </param>
        <summary>Remove a directory</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named directory does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTEMPTY" />
                </term>
                <description>
                  <para>
                    The named directory contains files other than
                    "<c>.</c>"
                    and
                    "<c>..</c>"
                    in it.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Write permission is denied on the directory containing the link
                    to be removed.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The directory containing the directory to be removed is marked sticky,
                    and neither the containing directory nor the directory to be removed
                    are owned by the effective user ID.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBUSY" />
                </term>
                <description>
                  <para>
                    The directory to be removed is the mount point
                    for a mounted file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while deleting the directory entry
                    or deallocating the inode.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The directory entry to be removed resides on a read-only file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.rmdir" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnCreateSymbolicLink">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnCreateSymbolicLink (string target, string link);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="target" Type="System.String" />
        <Parameter Name="link" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="target">
          A <see cref="T:System.String" /> containing the target of the
          symbolic link.
        </param>
        <param name="link">
          A <see cref="T:System.String" /> containing the path of the symbolic
          link itself.
        </param>
        <summary>Create a symbolic link.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the
                    <paramref name="name2" /> 
                    prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of either pathname exceeded 255 characters,
                    or the entire length of either path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    A component of the
                    <paramref name="link" /> 
                    path prefix denies search permission.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  <para>
                    The path name pointed at by the
                    <paramref name="link" /> 
                    argument
                    already exists.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making the directory entry for
                    <paramref name="link" /> ,
                    or allocating the inode for
                    <paramref name="link" /> ,
                    or writing out the link contents of
                    <paramref name="link" /> .
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The file
                    <paramref name="link" /> 
                    would reside on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new symbolic link is being placed
                    cannot be extended because there is no space left on the file
                    system containing the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The new symbolic link cannot be created because
                    there is no space left on the file
                    system that will contain the symbolic link.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    There are no free inodes on the file system on which the
                    symbolic link is being created.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new symbolic link
                    is being placed cannot be extended because the
                    user's quota of disk blocks on the file system
                    containing the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The new symbolic link cannot be created because the user's
                    quota of disk blocks on the file system that will
                    contain the symbolic link has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The user's quota of inodes on the file system on
                    which the symbolic link is being created has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making the directory entry or allocating the inode.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.symlink" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnRenamePath">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnRenamePath (string oldpath, string newpath);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="oldpath" Type="System.String" />
        <Parameter Name="newpath" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="oldpath">
          A <see cref="T:System.String" /> containing the path to rename.
        </param>
        <param name="newpath">
          A <see cref="T:System.String" /> containing the new path name.
        </param>
        <summary>Rename a file or directory.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of either pathname exceeded 255 characters,
                    or the entire length of either path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the
                    <paramref name="oldpath" /> 
                    path does not exist,
                    or a path prefix of
                    <paramref name="newpath" /> 
                    does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    A component of either path prefix denies search permission.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    The requested link requires writing in a directory with a mode
                    that denies write permission.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The directory containing
                    <paramref name="oldpath" /> 
                    is marked sticky,
                    and neither the containing directory nor
                    <paramref name="oldpath" /> 
                    are owned by the effective user ID.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The file pointed at by the
                    <paramref name="newpath" /> 
                    argument
                    exists,
                    the directory containing
                    <paramref name="newpath" /> 
                    is marked sticky,
                    and neither the containing directory nor
                    <paramref name="newpath" /> 
                    are owned by the effective user ID.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating either pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of either path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="oldpath" /> 
                    argument
                    is a directory, but
                    <paramref name="newpath" /> 
                    is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EISDIR" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="newpath" /> 
                    argument
                    is a directory, but
                    <paramref name="oldpath" /> 
                    is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EXDEV" />
                </term>
                <description>
                  <para>
                    The link named by
                    <paramref name="newpath" /> 
                    and the file named by
                    <paramref name="oldpath" /> 
                    are on different logical devices (file systems).
                    Note that this error
                    code will not be returned if the implementation permits cross-device
                    links.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new name is being placed
                    cannot be extended because there is no space left on the file
                    system containing the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new name
                    is being placed cannot be extended because the
                    user's quota of disk blocks on the file system
                    containing the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making or updating a directory entry.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The requested link requires writing in a directory on a read-only file
                    system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFAULT" />
                </term>
                <description>
                  <para>
                    Path
                    points outside the process's allocated address space.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="oldpath" /> 
                    argument
                    is a parent directory of
                    <paramref name="newpath" /> ,
                    or an attempt is made to rename
                    "<c>.</c>"
                    or
                    "<c>..</c>"
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTEMPTY" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="newpath" /> 
                    argument
                    is a directory and is not empty.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Stdlib.rename" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnCreateHardLink">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnCreateHardLink (string oldpath, string link);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="oldpath" Type="System.String" />
        <Parameter Name="link" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="oldpath">
          A <see cref="T:System.String" /> containing the path name to create
          a new reference to.
        </param>
        <param name="link">
          A <see cref="T:System.String" /> containing the file to create.
        </param>
        <summary>Create a hard link to a file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of either path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of either pathname exceeded 255 characters,
                    or entire length of either path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of either path prefix does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    The file system containing the file named by
                    <paramref name="name1" /> 
                    does not support links.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMLINK" />
                </term>
                <description>
                  <para>
                    The link count of the file named by
                    <paramref name="name1" /> 
                    would exceed 32767.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    A component of either path prefix denies search permission.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    The requested link requires writing in a directory with a mode
                    that denies write permission.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating one of the pathnames.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The file named by
                    <paramref name="name1" /> 
                    does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  <para>
                    The link named by
                    <paramref name="name2" /> 
                    does exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The file named by
                    <paramref name="oldpath" /> 
                    is a directory or is flagged immutable or append-only
                    (see
                    <see cref="M:Mono.Unix.Native.Syscall.chflags" />(2) ) .
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EXDEV" />
                </term>
                <description>
                  <para>
                    The link named by
                    <paramref name="link" /> 
                    and the file named by
                    <paramref name="link" /> 
                    are on different file systems.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new link is being placed
                    cannot be extended because there is no space left on the file
                    system containing the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The directory in which the entry for the new link
                    is being placed cannot be extended because the
                    user's quota of disk blocks on the file system
                    containing the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to
                    the file system to make the directory entry.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The requested link requires writing in a directory on a read-only file
                    system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFAULT" />
                </term>
                <description>
                  <para>
                    One of the pathnames specified
                    is outside the process's allocated address space.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.link" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnChangePathPermissions">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnChangePathPermissions (string path, Mono.Unix.Native.FilePermissions mode);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="mode" Type="Mono.Unix.Native.FilePermissions" />
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="mode">
          A <see cref="T:Mono.Unix.Native.FilePermissions" /> containing the
          new permissions for <paramref name="path" />.
        </param>
        <summary>Change the permission bits of a file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The effective user ID does not match the owner of the file and
                    the effective user ID is not the super-user.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFAULT" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="path" /> 
                    argument
                    points outside the process's allocated address space.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFTYPE" />
                </term>
                <description>
                  <para>
                    An attempt was made to set the sticky bit upon an executable.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.chmod" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnChangePathOwner">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnChangePathOwner (string path, long owner, long group);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="owner" Type="System.Int64" />
        <Parameter Name="group" Type="System.Int64" />
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="owner">
          A <see cref="T:System.Int64" /> containing the new User ID of the
          owner.
        </param>
        <param name="group">
          A <see cref="T:System.Int64" /> containing the new Group id of the
          owner.
        </param>
        <summary>Change owner and group of a file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  <para>
                    The effective user ID is not the super-user.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFAULT" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="path" /> 
                    argument
                    points outside the process's allocated address space.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.chown" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnTruncateFile">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnTruncateFile (string file, long length);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="length" Type="System.Int64" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to truncate.
        </param>
        <param name="length">
          A <see cref="T:System.Int64" /> containing the new size of the file.
        </param>
        <summary>Change the size of a file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    The named file is not writable by the user.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EISDIR" />
                </term>
                <description>
                  <para>
                    The named file is a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ETXTBSY" />
                </term>
                <description>
                  <para>
                    The file is a pure procedure (shared text) file that is being executed.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred updating the inode.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.truncate" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnChangePathTimes">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnChangePathTimes (string path, ref Mono.Unix.Native.Utimbuf buf);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="buf" Type="Mono.Unix.Native.Utimbuf&amp;" RefType="ref" />
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="buf">
          A <see cref="T:Mono.Unix.Native.Utimbuf" /> reference containing the
          new file access and modification times for <paramref name="path" />.
        </param>
        <summary>Set file access and modification times.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  Search permission is denied by a component of the  path  
                  prefix; or the <paramref name="buf" /> argument is a 
                  null pointer and the effective user ID of the process 
                  does not match the owner of the file, the process  does  
                  not have write permission for the file, and the process 
                  does not have appropriate privileges.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPERM" />
                </term>
                <description>
                  The <paramref name="buf" /> argument  is not a null pointer 
                  and the calling process' effective user ID does not match 
                  the owner of the file and the calling process does not 
                  have the appropriate privileges.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.utime" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnOpenHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnOpenHandle (string file, Mono.Fuse.OpenedPathInfo info);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to open.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance which 
          can be filled in to contain information about the opened file.
        </param>
        <summary>Open or create a file for reading or writing.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is not set and the named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path name that must exist does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    The required permissions (for reading and/or writing)
                    are denied for the given flags.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the directory in which it is to be created
                    does not permit writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EISDIR" />
                </term>
                <description>
                  <para>
                    The named file is a directory, and the arguments specify
                    it is to be opened for writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system,
                    and the file is to be modified.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMFILE" />
                </term>
                <description>
                  <para>
                    The process has already reached its limit for open file descriptors.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENFILE" />
                </term>
                <description>
                  <para>
                    The system file table is full.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMLINK" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_NOFOLLOW" /> 
                    was specified and the target is a symbolic link.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENXIO" />
                </term>
                <description>
                  <para>
                    The named file is a character special or block
                    special file, and the device associated with this special file
                    does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENXIO" />
                </term>
                <description>
                  <para>
                    The named file is a fifo, no process has
                    it open for reading, and the arguments specify it is
                    to be opened for writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINTR" />
                </term>
                <description>
                  <para>
                    The
                    <c>open</c>()
                    operation was interrupted by a signal.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_SHLOCK" /> 
                    or
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_EXLOCK" /> 
                    is specified but the underlying file system does not support locking.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    The named file is a special file mounted through a file system that
                    does not support access to it (e.g. NFS).
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EWOULDBLOCK" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_NONBLOCK" /> 
                    and one of
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_SHLOCK" /> 
                    or
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_EXLOCK" /> 
                    is specified and the file is locked.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the directory in which the entry for the new file is being placed
                    cannot be extended because there is no space left on the file
                    system containing the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and there are no free inodes on the file system on which the
                    file is being created.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the directory in which the entry for the new file
                    is being placed cannot be extended because the
                    user's quota of disk blocks on the file system
                    containing the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the user's quota of inodes on the file system on
                    which the file is being created has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making the directory entry or
                    allocating the inode for
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" />  .
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ETXTBSY" />
                </term>
                <description>
                  <para>
                    The file is a pure procedure (shared text) file that is being
                    executed and the
                    <c>open</c>()
                    system call requests write access.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    and
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_EXCL" /> 
                    were specified and the file exists.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    An attempt was made to open a socket (not currently implemented).
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    An attempt was made to open a descriptor with an illegal combination
                    of
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_RDONLY" />  ,
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_WRONLY" />  ,
                    and
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_RDWR" />  .
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.open" />.
          </para>
          <para>
            No creation or truncation flags such as 
            <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" />, 
            <see cref="F:Mono.Unix.Native.OpenFlags.O_EXCL" />, and
            <see cref="F:Mono.Unix.Native.OpenFlags.O_TRUNC" />, 
            will be passed in
            <see cref="P:Mono.Fuse.OpenedPathInfo.OpenFlags" />.
            This method should check if the operation is permitted for the
            given flags.  Open may optionally return an arbitrary file handle
            by filling in <see cref="P:Mono.Fuse.OpenedPathInfo.Handle" />,
            which will be provided to all subsequent handle operations.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
        <altmember cref="M:Mono.Fuse.FileSystem.OnCreateHandle" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnFlushHandle" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnGetHandleStatus" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnReadHandle" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnWriteHandle" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnReleaseHandle" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnSynchronizeHandle" />
      </Docs>
    </Member>
    <Member MemberName="OnReadHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnReadHandle (string file, Mono.Fuse.OpenedPathInfo info, byte[] buf, long offset, out int bytesWritten);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="buf" Type="System.Byte[]" />
        <Parameter Name="offset" Type="System.Int64" />
        <Parameter Name="bytesWritten" Type="System.Int32&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to read.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance which 
          contains information about the file to read.
        </param>
        <param name="buf">
          A <see cref="T:System.Byte" /> array containing the buffer to fill
          in.  <paramref name="buf.Length" /> bytes should be written if
          possible; see the remarks for more information.
        </param>
        <param name="offset">
          A <see cref="T:System.Int64" /> containing the offset within 
          <paramref name="file" /> to begin reading.
        </param>
        <param name="bytesWritten">
          A <see cref="T:System.Int32" /> reference containing the number of
          bytes written to <paramref name="buf" />.  This should be equal to
          <paramref name="buf.Length" /> if possible; see the remakrs for more
          information.
        </param>
        <summary>Read data from an open file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    is not a valid file or socket descriptor open for reading.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINTR" />
                </term>
                <description>
                  <para>
                    A read from a slow device was interrupted before
                    any data arrived by the delivery of a signal.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EAGAIN" />
                </term>
                <description>
                  <para>
                    The file was marked for non-blocking I/O,
                    and no data were ready to be read.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EISDIR" />
                </term>
                <description>
                  <para>
                    The file descriptor is associated with a directory residing
                    on a file system that does not allow regular read operations on
                    directories (e.g. NFS).
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    The file descriptor is associated with a file system and file type that
                    do not allow regular read operations on it.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOVERFLOW" />
                </term>
                <description>
                  <para>
                    The file descriptor is associated with a regular file,
                    <paramref name="buf.Length" /> 
                    is greater than 0,
                    <paramref name="offset" /> 
                    is before the end-of-file, and
                    <paramref name="offset" /> 
                    is greater than or equal to the offset maximum established
                    for this file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.pread" />.
          </para>
          <para>
            This method should set <paramref name="bytesWritten" /> to exactly
            the number of bytes requested (<paramref name="buf.Length" />)
            except on end-of-file or error, otherwise the rest of the data
            will be substituted with zeros.  An exception to this is when the 
            <see cref="P:Mono.Fuse.FileSystem.EnableDirectIO" /> mount option is
            <see langword="true" />, in which case the return value of the 
            <see cref="M:Mono.Unix.Native.Syscall.read" /> system call will
            reflect the value <paramref name="bytesWritten" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnWriteHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnWriteHandle (string file, Mono.Fuse.OpenedPathInfo info, byte[] buf, long offset, out int bytesRead);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="buf" Type="System.Byte[]" />
        <Parameter Name="offset" Type="System.Int64" />
        <Parameter Name="bytesRead" Type="System.Int32&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <param name="buf">
          A <see cref="T:System.Byte" /> array containing the data that should
          be written.
        </param>
        <param name="offset">
          A <see cref="T:System.Int64" /> containing the offset within
          <paramref name="file" /> to begin writing.
        </param>
        <param name="bytesRead">
          A <see cref="T:System.Int32" /> reference that should be filled in
          to contain the number of bytes read from <paramref name="buf" />.
        </param>
        <summary>Write data to an open file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    is not a valid descriptor open for writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPIPE" />
                </term>
                <description>
                  <para>
                    An attempt is made to write to a pipe that is not open
                    for reading by any process.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EPIPE" />
                </term>
                <description>
                  <para>
                    An attempt is made to write to a socket of type
                     <see cref="F:Mono.Unix.Native.Errno.SOCK_STREAM" /> 
                    that is not connected to a peer socket.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFBIG" />
                </term>
                <description>
                  <para>
                    An attempt was made to write a file that exceeds the process's
                    file size limit or the maximum file size.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    There is no free space remaining on the file system
                    containing the file.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    The user's quota of disk blocks on the file system
                    containing the file has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINTR" />
                </term>
                <description>
                  <para>
                    A signal interrupted the write before it could be completed.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EAGAIN" />
                </term>
                <description>
                  <para>
                    The file was marked for non-blocking I/O,
                    and no data could be written immediately.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    An attempt was made to write over a disk label area at the beginning
                    of a slice.
                    Use
                    <c>disklabel</c>(8)
                    to enable writing on the disk label area.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.pwrite" />.
          </para>
          <para>
            This method should set <paramref name="bytesRead" /> to exactly
            the number of bytes requested (<paramref name="buf.Length" />)
            except on end-of-file or error, otherwise the rest of the data
            will be substituted with zeros.  An exception to this is when the 
            <see cref="P:Mono.Fuse.FileSystem.EnableDirectIO" /> mount option is
            <see langword="true" />, in which case the return value of the 
            <see cref="M:Mono.Unix.Native.Syscall.write" /> system call will
            reflect the value <paramref name="bytesWritten" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnGetFileSystemStatus">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnGetFileSystemStatus (string path, out Mono.Unix.Native.Statvfs buf);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="buf" Type="Mono.Unix.Native.Statvfs&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the file or directory to 
          get the status of.
        </param>
        <param name="buf">
          A <see cref="T:Mono.Unix.Native.Statvfs" /> reference which should
          be filled in to contain information about the mounted file system.
        </param>
        <summary>Get file system statistics.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINTR" />
                </term>
                <description>
                  <para>
                    A signal interrupted the write before it could be completed.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path name that must exist does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSYS" />
                </term>
                <description>
                  <para>
                    The file system does not support this call.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOVERFLOW" />
                </term>
                <description>
                  <para>
                    Some values were too large to be represented in the
                    returned structure.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.statvfs" />.
          </para>
          <para>
            The <see cref="F:Mono.Unix.Native.Statvfs.f_frsize" />,
            <see cref="F:Mono.Unix.Native.Statvfs.f_favail" />,
            <see cref="F:Mono.Unix.Native.Statvfs.f_fsid" />, and
            <see cref="F:Mono.Unix.Native.Statvfs.f_flag" /> fields are
            ignored.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnFlushHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnFlushHandle (string file, Mono.Fuse.OpenedPathInfo info);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file name to flush.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <summary>Possibly flush cached data.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="d" /> 
                    argument
                    is not an active descriptor.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINTR" />
                </term>
                <description>
                  <para>
                    An interrupt was received.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    The underlying object did not fit, cached data was lost.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            This is vaguely similar to 
            <see cref="M:Mono.Unix.Native.Syscall.close" />.
          </para>
          <para>
            This is <paramref name="not" /> equivalent to 
            <see cref="M:Mono.Unix.Native.Syscall.fsync" />.  This is not a
            request to sync dirty data.
          </para>
          <para>
            <see cref="M:Mono.Fuse.FileSystem.OnFlushHandle" /> is called on
            each <see cref="M:Mono.Unix.Native.Syscall.close" /> of a file
            descriptor.  So if a file system wants to return write errors in
            <c>close</c>(2) and and the file has cached dirty data, this is a
            good place to write back data and return any errors.  Since many
            applications ignore <c>close</c>(2) errors this is not always
            useful.
          </para>
          <block subset="none" type="note">
            <para>
              The <see cref="M:Mono.Fuse.FileSystem.OnFlushHandle" /> method
              may be called more than once for each
              <see cref="M:Mono.Fuse.FileSystem.OnOpenHandle" />.  This
              happens if more than one file descriptor refers to an opened
              file due to 
              <see cref="M:Mono.Unix.Nativev.Syscall.dup" />, 
              <see cref="M:Mono.Unix.Nativev.Syscall.dup2" />, or
              <c>fork</c>(2) calls.  It is not possible to determine if a
              flush is final, so each flush should be treated equally.
              Multiple write-flush sequences are relatively rare, so this
              shouldn't be a problem.
            </para>
            <para>
              File systems shouldn't assume that 
              <see cref="M:Mono.Fuse.FileSystem.OnFlushHandle" /> will always
              be called after some writes, or that it will be called at all.
            </para>
          </block>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnReleaseHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnReleaseHandle (string file, Mono.Fuse.OpenedPathInfo info);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to release.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <summary>Close an opened file.</summary>
        <returns>
          <para>
            The return value is ignored.
          </para>
        </returns>
        <remarks>
          <para>
            Vaguely similar to <see cref="M:Mono.Unix.Native.Syscall.close" />.
          </para>
          <para>
            <see cref="M:Mono.Fuse.FileSystem.OnReleaseHandle" /> is called 
            when there are no more references to an open file: all file
            descriptors have been closed and all memory mappings have been
            unmapped.
          </para>
          <para>
            For every <see cref="M:Mono.Fuse.FileSystem.OnOpenHandle" /> call
            there will be exactly one 
            <see cref="M:Mono.Fuse.FileSystem.OnReleaseHandle" /> call with
            the same <see cref="P:Mono.Fuse.OpenedPathInfo.OpenFlags" /> and
            <see cref="P:Mono.Fuse.OpenedPathInfo.Handle" />.  It is possible
            to have a file opened more than once, in which case only the last
            release will mean that no more reads/writes will happen on the
            file.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnSynchronizeHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnSynchronizeHandle (string file, Mono.Fuse.OpenedPathInfo info, bool onlyUserData);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="onlyUserData" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to synchronize.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <param name="onlyUserData">
          A <see cref="T:System.Boolean" />; if <see langword="true" />,
          then only the user data should be flushed, and not the meta data.
        </param>
        <summary>Synchronize file contents.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    is not a valid descriptor.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    refers to a socket, not to a file.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.fdatasync" />
            if <paramref name="onlyUserData" /> is <see langword="true" />,
            otherwise similar to 
            <see cref="M:Mono.Unix.Native.Syscall.fsync" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnSetPathExtendedAttribute">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnSetPathExtendedAttribute (string path, string name, byte[] value, Mono.Unix.Native.XattrFlags flags);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="name" Type="System.String" />
        <Parameter Name="value" Type="System.Byte[]" />
        <Parameter Name="flags" Type="Mono.Unix.Native.XattrFlags" />
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing path name on which to
          set the extended attribute.
        </param>
        <param name="name">
          A <see cref="T:System.String" /> containing the name of the extended
          attribute to set.
        </param>
        <param name="value">
          A <see cref="T:System.Byte" /> array containing the value of the
          extended value.
        </param>
        <param name="flags">
          A <see cref="T:Mono.Unix.Native.XattrFlags" /> instance containing
          flags to control the extended attribute creation process.
        </param>
        <summary>Create or modify an extended attribute.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  If <see cref="F:Mono.Unix.Native.XattrFlags.XATTR_CREATE" />
                  is specified and the attribute already exists.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                    The user's quota of disk blocks on the file system
                    containing the file has been exhausted.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENODATA" />
                </term>
                <description>
                  If <see cref="F:Mono.Unix.Native.XattrFlags.XATTR_REPLACE" />
                  is specified and the attribute does not exist.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  There is insufficient space to store the extended attribute.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTSUP" />
                </term>
                <description>
                  Extended attributes are not supported by the file system.
                </description>
              </item>
            </list>
            <para>
              The errors returned from 
              <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> are also
              applicable.
            </para>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.setxattr" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnGetPathExtendedAttribute">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnGetPathExtendedAttribute (string path, string name, byte[] value, out int bytesWritten);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="name" Type="System.String" />
        <Parameter Name="value" Type="System.Byte[]" />
        <Parameter Name="bytesWritten" Type="System.Int32&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing path name on which to
          get the extended attribute.
        </param>
        <param name="name">
          A <see cref="T:System.String" /> containing the name of the extended
          attribute to retrieve.
        </param>
        <param name="value">
          A <see cref="T:System.Byte" /> array to be filled in with the value
          of the extended attribute <paramref name="name" />.
        </param>
        <param name="bytesWritten">
          A <see cref="T:System.Int32" /> reference which will be initializaed
          to contain the number of bytes written into 
          <paramref name="value" />.
        </param>
        <summary>Retreive an extended attribute value.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENODATA" />
                </term>
                <description>
                  The extended attribute <paramref name="name" /> does not
                  exist.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ERANGE" />
                </term>
                <description>
                  <paramref name="value.Length" /> is too small to hold the
                  result.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTSUP" />
                </term>
                <description>
                  Extended attributes are not supported by the file system.
                </description>
              </item>
            </list>
            <para>
              The errors returned from 
              <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> are also
              applicable.
            </para>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.getxattr" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnListPathExtendedAttributes">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnListPathExtendedAttributes (string path, out string[] names);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="names" Type="System.String[]&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the path name on which
          to retrieve the current extended attribute names.
        </param>
        <param name="names">
          A <see cref="T:System.String" /> array reference which should be
          filled in to contain the names of the extended attributes available
          on <paramref name="path" />.
        </param>
        <summary>List extended attribute names.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTSUP" />
                </term>
                <description>
                  Extended attributes are not supported by the file system.
                </description>
              </item>
            </list>
            <para>
              The errors returned from 
              <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> are also
              applicable.
            </para>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.listxttr" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnRemovePathExtendedAttribute">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnRemovePathExtendedAttribute (string path, string name);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="name" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing path to modify.
        </param>
        <param name="name">
          A <see cref="T:System.String" /> containing the extended attribute
          to remove.
        </param>
        <summary>Remove an extended attribute.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENODATA" />
                </term>
                <description>
                  The extended attribute <paramref name="name" /> does not
                  exist.
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTSUP" />
                </term>
                <description>
                  Extended attributes are not supported by the file system.
                </description>
              </item>
            </list>
            <para>
              The errors returned from 
              <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> are also
              applicable.
            </para>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.removexattr" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnOpenDirectory">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnOpenDirectory (string directory, Mono.Fuse.OpenedPathInfo info);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="directory" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
      </Parameters>
      <Docs>
        <param name="directory">
          A <see cref="T:System.String" /> containing the directory to open.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened directory.
        </param>
        <summary>Open a directory for later reading.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMFILE" />
                </term>
                <description>
                  <para>
                    The process has already reached its limit for open file descriptors.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENFILE" />
                </term>
                <description>
                  <para>
                    The system file table is full.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path name that must exist does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOMEM" />
                </term>
                <description>
                  <para>
                    Insufficient memory to complete the operation.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    <paramref name="directory" /> is not a directory.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.opendir" />.
          </para>
          <para>
            This method does not need to be overridden in order to support
            directory traversal.  It is valid to just override 
            <see cref="M:Mono.Fuse.FileSystem.OnReadDirectory" /> without
            overridding <see cref="M:Mono.Fuse.FileSystem.OnOpenDirectory" />.
          </para>
          <para>
            If this method is overridden, it will be invoked before any calls
            to <see cref="M:Mono.Fuse.FileSystem.OnReadDirectory" />, followed
            by a call to <see cref="M:Mono.Fuse.FileSystem.OnReleaseDirectory" />.
          </para>
          <para>
            This method should check if the operation is permitted for the
            directory <paramref name="directory" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnReadDirectory">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnReadDirectory (string directory, Mono.Fuse.OpenedPathInfo info, out System.Collections.Generic.IEnumerable&lt;Mono.Fuse.DirectoryEntry&gt; paths);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="directory" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="paths" Type="System.Collections.Generic.IEnumerable&lt;Mono.Fuse.DirectoryEntry&gt;&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="directory">
          A <see cref="T:System.String" /> containing the directory to read.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened directory.
        </param>
        <param name="paths">
          A reference to a 
          <see cref="T:System.Collections.Generic.IEnumerable`1" /> interface
          specialized for the <see cref="T:Mono.Fuse.DirectoryEntry" /> type.
        </param>
        <summary>Read the files in a directory.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    is not a valid descriptor
                    (if <see cref="M:Mono.Fuse.FileSystem.OnOpenDirectory" />
                    was overridden).
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMFILE" />
                </term>
                <description>
                  <para>
                    The process has already reached its limit for open file descriptors.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENFILE" />
                </term>
                <description>
                  <para>
                    The system file table is full.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path name that must exist does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOMEM" />
                </term>
                <description>
                  <para>
                    Insufficient memory to complete the operation.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    <paramref name="directory" /> is not a directory.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.readdir" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnReleaseDirectory">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnReleaseDirectory (string directory, Mono.Fuse.OpenedPathInfo info);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="directory" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
      </Parameters>
      <Docs>
        <param name="directory">
          A <see cref="T:System.String" /> containing the directory to
          release.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened directory.
        </param>
        <summary>Release a directory.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    is not a valid descriptor.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.closedir" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnSynchronizeDirectory">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnSynchronizeDirectory (string directory, Mono.Fuse.OpenedPathInfo info, bool onlyUserData);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="directory" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="onlyUserData" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="directory">
          A <see cref="T:System.String" /> containing the directory to
          synchronize.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened directory.
        </param>
        <param name="onlyUserData">
          A <see cref="T:System.Boolean" />; if <see langword="true" />, 
          then only the user data should be flushed, not meta data.
        </param>
        <summary>Synchronize directory contents.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    is not a valid descriptor.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="info.Handle" /> 
                    argument
                    refers to a socket, not to a file.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.fdatasync" />
            if <paramref name="onlyUserData" /> is <see langword="true" />,
            otherwise similar to 
            <see cref="M:Mono.Unix.Native.Syscall.fsync" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnAccessPath">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnAccessPath (string path, Mono.Unix.Native.AccessModes mode);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="path" Type="System.String" />
        <Parameter Name="mode" Type="Mono.Unix.Native.AccessModes" />
      </Parameters>
      <Docs>
        <param name="path">
          A <see cref="T:System.String" /> containing the path to check the
          access of.
        </param>
        <param name="mode">
          A <see cref="T:Mono.Unix.Native.AccessModes" /> instance containing
          the requested access mode to check.
        </param>
        <summary>Check file access permissions.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    The named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    Write access is requested for a file on a read-only file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ETXTBSY" />
                </term>
                <description>
                  <para>
                    Write access is requested for a pure procedure (shared text)
                    file presently being executed.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Permission bits of the file mode do not permit the requested
                    access, or search permission is denied on a component of the
                    path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFAULT" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="path" /> 
                    argument
                    points outside the process's allocated address space.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.access" />.
          </para>
          <para>
            If the 
            <see cref="P:Mono.Fuse.FileSystem.EnableKernelPermissionChecking" />
            mount option is given, this method is not called.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnCreateHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnCreateHandle (string file, Mono.Fuse.OpenedPathInfo info, Mono.Unix.Native.FilePermissions mode);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="mode" Type="Mono.Unix.Native.FilePermissions" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to create.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <param name="mode">
          A <see cref="T:Mono.Unix.Native.FilePermissions" /> instance
          containing the file permissions of the file to create.
        </param>
        <summary>Create and open a file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOTDIR" />
                </term>
                <description>
                  <para>
                    A component of the path prefix is not a directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENAMETOOLONG" />
                </term>
                <description>
                  <para>
                    A component of a pathname exceeded 255 characters,
                    or an entire path name exceeded 1023 characters.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is not set and the named file does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOENT" />
                </term>
                <description>
                  <para>
                    A component of the path name that must exist does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    Search permission is denied for a component of the path prefix.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    The required permissions (for reading and/or writing)
                    are denied for the given flags.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EACCES" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the directory in which it is to be created
                    does not permit writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ELOOP" />
                </term>
                <description>
                  <para>
                    Too many symbolic links were encountered in translating the pathname.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EISDIR" />
                </term>
                <description>
                  <para>
                    The named file is a directory, and the arguments specify
                    it is to be opened for writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EROFS" />
                </term>
                <description>
                  <para>
                    The named file resides on a read-only file system,
                    and the file is to be modified.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMFILE" />
                </term>
                <description>
                  <para>
                    The process has already reached its limit for open file descriptors.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENFILE" />
                </term>
                <description>
                  <para>
                    The system file table is full.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EMLINK" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_NOFOLLOW" /> 
                    was specified and the target is a symbolic link.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENXIO" />
                </term>
                <description>
                  <para>
                    The named file is a character special or block
                    special file, and the device associated with this special file
                    does not exist.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENXIO" />
                </term>
                <description>
                  <para>
                    The named file is a fifo, no process has
                    it open for reading, and the arguments specify it is
                    to be opened for writing.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINTR" />
                </term>
                <description>
                  <para>
                    The
                    <c>open</c>()
                    operation was interrupted by a signal.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_SHLOCK" /> 
                    or
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_EXLOCK" /> 
                    is specified but the underlying file system does not support locking.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    The named file is a special file mounted through a file system that
                    does not support access to it (e.g. NFS).
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EWOULDBLOCK" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_NONBLOCK" /> 
                    and one of
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_SHLOCK" /> 
                    or
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_EXLOCK" /> 
                    is specified and the file is locked.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the directory in which the entry for the new file is being placed
                    cannot be extended because there is no space left on the file
                    system containing the directory.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ENOSPC" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and there are no free inodes on the file system on which the
                    file is being created.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the directory in which the entry for the new file
                    is being placed cannot be extended because the
                    user's quota of disk blocks on the file system
                    containing the directory has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EDQUOT" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    is specified,
                    the file does not exist,
                    and the user's quota of inodes on the file system on
                    which the file is being created has been exhausted.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while making the directory entry or
                    allocating the inode for
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" />  .
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.ETXTBSY" />
                </term>
                <description>
                  <para>
                    The file is a pure procedure (shared text) file that is being
                    executed and the
                    <c>open</c>()
                    system call requests write access.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EEXIST" />
                </term>
                <description>
                  <para>
                    <see cref="F:Mono.Unix.Native.OpenFlags.O_CREAT" /> 
                    and
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_EXCL" /> 
                    were specified and the file exists.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOPNOTSUPP" />
                </term>
                <description>
                  <para>
                    An attempt was made to open a socket (not currently implemented).
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    An attempt was made to open a descriptor with an illegal combination
                    of
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_RDONLY" />  ,
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_WRONLY" />  ,
                    and
                     <see cref="F:Mono.Unix.Native.OpenFlags.O_RDWR" />  .
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.creat" />.
          </para>
          <para>
            If the file does not exist, first create it with the specified
            <paramref name="mode" /> and then open it.
          </para>
          <para>
            If this method is not overridden (or under Linux kernel versions
            earlier than 2.6.15), then the 
            <see cref="M:Mono.Fuse.FileSystem.OnCreateSpecialFile" /> and 
            <see cref="M:Mono.Fuse.FileSystem.OnOpenHandle" /> methods will be
            called instead.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnTruncateHandle">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnTruncateHandle (string file, Mono.Fuse.OpenedPathInfo info, long length);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="length" Type="System.Int64" />
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to truncate.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <param name="length">
          A <see cref="T:System.Int64" /> containing the new file size.
        </param>
        <summary>Change the size of an open file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="fd" /> 
                    argument
                    is not a valid descriptor.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="fd" /> 
                    argument
                    references a socket, not a file.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EINVAL" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="fd" /> 
                    descriptor
                    is not open for writing.
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.ftruncate" />.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="OnGetHandleStatus">
      <MemberSignature Language="C#" Value="protected virtual Mono.Unix.Native.Errno OnGetHandleStatus (string file, Mono.Fuse.OpenedPathInfo info, out Mono.Unix.Native.Stat buf);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.Errno</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="file" Type="System.String" />
        <Parameter Name="info" Type="Mono.Fuse.OpenedPathInfo" />
        <Parameter Name="buf" Type="Mono.Unix.Native.Stat&amp;" RefType="out">
          <Attributes>
            <Attribute>
              <AttributeName>System.Runtime.InteropServices.Out</AttributeName>
            </Attribute>
          </Attributes>
        </Parameter>
      </Parameters>
      <Docs>
        <param name="file">
          A <see cref="T:System.String" /> containing the file to 
          get the status of.
        </param>
        <param name="info">
          A <see cref="T:Mono.Fuse.OpenedPathInfo" /> instance containing
          information about the opened file.
        </param>
        <param name="buf">
          A <see cref="T:Mono.Unix.Native.Stat" /> instance which should be
          filled in to contain information about the open file 
          <paramref name="info" />.
        </param>
        <summary>Get attributes of an open file.</summary>
        <returns>
          <para>
            Returns <c>0</c> if successful; otherwise, returns the reason
            for the failure.
          </para>
          <block subset="none" type="usage">
            <para>The following errors can be returned:</para>
            <list type="table">
              <listheader>
                <term>Error</term>
                <description>Details</description>
              </listheader>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EBADF" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="fd" /> 
                    argument
                    is not a valid open file descriptor.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EFAULT" />
                </term>
                <description>
                  <para>
                    The
                    <paramref name="sb" /> 
                    argument
                    points to an invalid address.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EIO" />
                </term>
                <description>
                  <para>
                    An I/O error occurred while reading from or writing to the file system.
                  </para>
                </description>
              </item>
              <item>
                <term>
                  <see cref="F:Mono.Unix.Native.Errno.EOVERFLOW" />
                </term>
                <description>
                  <para>
                    The file size in bytes cannot be
                    represented correctly in the structure pointed to by
                    <paramref name="sb" /> .
                  </para>
                </description>
              </item>
            </list>
          </block>
        </returns>
        <remarks>
          <para>
            Similar to <see cref="M:Mono.Unix.Native.Syscall.fstat" />.
          </para>
          <para>
            This is currently only called after 
            <see cref="M:Mono.Fuse.FileSystem.OnCreateHandle" /> 
            (if <c>OnCreateHandle</c> is implemented).  It may be called for
            invocations of <see cref="M:Mono.Unix.Native.Syscall.fstat" />
            in the future.
          </para>
          <block subset="none" type="overrides">
            <para>
              Overriding implementations should <paramref name="not" /> 
              generate an exception.  All exceptions which escape this method
              are translated into <see cref="F:Mono.Unix.Native.Errno.EIO" />.
            </para>
          </block>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="FuseOptions">
      <MemberSignature Language="C#" Value="public System.Collections.Generic.IDictionary&lt;string,string&gt; FuseOptions { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Collections.Generic.IDictionary&lt;System.String,System.String&gt;</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>FUSE startup options.</summary>
        <value>
          A <see cref="T:System.Collections.Generic.IDictionary`2" /> instance
          containing options to initialize FUSE with when
          <see cref="M:Mono.Fuse.FileSystem.Start" /> is called.
        </value>
        <remarks>
          <para>
            This must only contain FUSE-recognized options, otherwise FUSE
            will report an error and 
            <see cref="M:Mono.Fuse.FileSystem.Start" /> will generate a 
            <see cref="T:System.NotSupportedException" />.
          </para>
          <para>
            This property is present so that if FUSE gains additional
            options, the new options can be used without requiring an update
            to <see cref="T:Mono.Fuse.FileSystem" />.
          </para>
        </remarks>
        <altmember cref="M:Mono.Fuse.FileSystem.Start" />
      </Docs>
    </Member>
    <Member MemberName="EnableFuseDebugOutput">
      <MemberSignature Language="C#" Value="public bool EnableFuseDebugOutput { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
          Enable generation of FUSE debug messages to the standard output stream.
        </summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether FUSE should
          send debug messages to the standard output stream.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the
            <c>-o debug</c> or <c>-d</c> arguments; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>debug</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="AllowAccessToOthers">
      <MemberSignature Language="C#" Value="public bool AllowAccessToOthers { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Allow access to other users.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether other users can
					access this file system.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the
            <c>-o allow_other</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            When this property is <see langword="false" />, then the
            file system can only be accessed by programs executed by the same
            User ID as the user who started this file system.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>allow_other</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="AllowAccessToRoot">
      <MemberSignature Language="C#" Value="public bool AllowAccessToRoot { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Allow access to other users.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether the <c>root</c>
          user can access this file system.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o allow_root</c> argument; it is <see langword="false" /> by
            default.
          </para>
          <para>
            When this property is <see langword="false" />, then the
            file system can not be accessed by the <c>root</c> user.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>allow_root</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="AllowMountOverNonEmptyDirectory">
      <MemberSignature Language="C#" Value="public bool AllowMountOverNonEmptyDirectory { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Allow mounting over a non-empty directory.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether this file system
          can be mounted over a non-empty directory.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o nonempty</c> argument; it is <see langword="false" /> by
            default.
          </para>
          <para>
            When this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.MountPoint" /> does not need to
            be an empty directory.  Normally, if this property is 
            <see langword="false" /> then 
            <see cref="M:Mono.Fuse.FileSystem.Start" /> will throw a
            <see cref="T:System.NotSupportedException" /> if the directory is
            not empty.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>nonempty</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="EnableKernelPermissionChecking">
      <MemberSignature Language="C#" Value="public bool EnableKernelPermissionChecking { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Enable permission checking by the OS kernel.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether the OS kernel
          should perform permission checking.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o default_permissions</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>default_permissions</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="Name">
      <MemberSignature Language="C#" Value="public string Name { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.String</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Gets or sets the file system name.</summary>
        <value>
          A <see cref="T:System.String" /> containing the file system name.
        </value>
        <remarks>
          <para>TODO: why care about the file system name?</para>
          <para>
            This property can be set with the 
            <c>-o fsname=NAME</c> argument; it is 
            <see langword="null" /> by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>fsname</c> key, the value of which is the 
            file system name.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="EnableLargeReadRequests">
      <MemberSignature Language="C#" Value="public bool EnableLargeReadRequests { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Issue large read requests.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether the OS kernel
          should issue large read requests.
        </value>
        <remarks>
          <para>
            This is for the Linux kernel 2.4 version of FUSE only.
          </para>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o large_read</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>large_read</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="MaxReadSize">
      <MemberSignature Language="C#" Value="public int MaxReadSize { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Gets or sets the maximum size of read requests.</summary>
        <value>
          A <see cref="T:System.Int32" /> containing the maximum size of the
          read requests.
        </value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o max_read=N</c> argument; it is <c>0</c> by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>max_read</c> key, the value of which is the 
            maximum size for read requests.  Otherwise there will be no entry
            in <see cref="P:Mono.Fuse.FileSystem.FuseOptions" />, and 
            <c>0</c> will be returned from the property getter.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="ImmediatePathRemoval">
      <MemberSignature Language="C#" Value="public bool ImmediatePathRemoval { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Immediately remove file and directories, don't hide them.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether files and
          directories should be immediately removed and not hidden.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o hard_remove</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>hard_remove</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="SetsInodes">
      <MemberSignature Language="C#" Value="public bool SetsInodes { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>FileSystem sets inode numbers.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether the file system
          sets inode numbers.
        </value>
        <remarks>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o use_ino</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>use_ino</c> key.
          </para>
          <para>
            Set this property to <see langword="true" /> if your overridden
            version of <see cref="M:Mono.Fuse.FileSystem.OnReadDirectory" />
            sets the <see cref="F:Mono.Unix.Native.Stat.st_ino" /> field 
            in the <see cref="F:Mono.Fuse.DirectoryEntry.Stat" /> field.
            Otherwise, the <see cref="F:Mono.Unix.Native.Stat.st_ino" /> field 
            value will be ignored.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
        <altmember cref="M:Mono.Fuse.FileSystem.OnReadDirectory" />
      </Docs>
    </Member>
    <Member MemberName="ReaddirSetsInode">
      <MemberSignature Language="C#" Value="public bool ReaddirSetsInode { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Readdir sets inodes.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether the file system
          sets inode numbers.
        </value>
        <remarks>
          <para>
            TODO: How does this differ from
            <see cref="P:Mono.Fuse.FileSystem.SetsInodes" />?
          </para>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o readdir_ino</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>readdir_ino</c> key.
          </para>
          <para>
            Set this property to <see langword="true" /> if your overridden
            version of <see cref="M:Mono.Fuse.FileSystem.OnReadDirectory" />
            sets the <see cref="F:Mono.Unix.Native.Stat.st_ino" /> field 
            in the <see cref="F:Mono.Fuse.DirectoryEntry.Stat" /> field.
            Otherwise, the <see cref="F:Mono.Unix.Native.Stat.st_ino" /> field 
            value will be ignored.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="EnableDirectIO">
      <MemberSignature Language="C#" Value="public bool EnableDirectIO { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Enable Direct I/O.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether the file system
          should use direct I/O.
        </value>
        <remarks>
          <para>
            TODO: What's this really control?
          </para>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o direct_io</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>direct_io</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="EnableKernelCache">
      <MemberSignature Language="C#" Value="public bool EnableKernelCache { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Cache files in kernel.</summary>
        <value>
          A <see cref="T:System.Boolean" /> indicating whether files should be
          cached in the kernel.
        </value>
        <remarks>
          <para>
            TODO: What's this really control?
          </para>
          <para>
            This property can be set to <see langword="true" /> with the 
            <c>-o kernel_cache</c> argument; it is 
            <see langword="false" /> by default.
          </para>
          <para>
            If this property is <see langword="true" />, then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>kernel_cache</c> key.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="DefaultUmask">
      <MemberSignature Language="C#" Value="public Mono.Unix.Native.FilePermissions DefaultUmask { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>Mono.Unix.Native.FilePermissions</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Default file umask.</summary>
        <value>
          A <see cref="T:Mono.Unix.Native.FilePermissions" /> instance containing 
          the default file umask.
				</value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o umask=M</c> argument; it is <c>0</c>
            by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>umask</c> key, the value of which is the 
            umask.
          </para>
          <para>
            The <see cref="P:Mono.Fuse.FileSystem.DefaultUmask" /> value is 
            applied to the <see cref="T:Mono.Unix.Native.Stat.st_mode" /> 
            field returned by
            <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> and 
            <see cref="M:Mono.Fuse.FileSystem.OnGetHandleStatus" />.
            This permits changing 
            <see cref="T:Mono.Unix.Native.Stat.st_mode" /> for all files
            within the file system.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="DefaultUserId">
      <MemberSignature Language="C#" Value="public long DefaultUserId { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Int64</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Default file owner User ID.</summary>
        <value>
          A <see cref="T:System.Int64" /> containing the default User ID.
        </value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o uid=N</c> argument; it is <c>0</c>
            by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>uid</c> key, the value of which is the 
            default User ID.
          </para>
          <para>
            The <see cref="P:Mono.Fuse.FileSystem.DefaultUserId" /> value is 
            used as the <see cref="T:Mono.Unix.Native.Stat.st_uid" /> field
            value returned by 
            <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> and 
            <see cref="M:Mono.Fuse.FileSystem.OnGetHandleStatus" /> when
            <see cref="T:Mono.Unix.Native.Stat.st_uid" /> is zero.
            This permits changing 
            <see cref="T:Mono.Unix.Native.Stat.st_uid" /> for all files
            within the file system if it isn't otherwise set.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="DefaultGroupId">
      <MemberSignature Language="C#" Value="public long DefaultGroupId { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Int64</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Default file owner Group ID.</summary>
        <value>
          A <see cref="T:System.Int64" /> containing the default Group ID.
        </value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o gid=N</c> argument; it is <c>0</c>
            by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>gid</c> key, the value of which is the 
            default Group ID.
          </para>
          <para>
            The <see cref="P:Mono.Fuse.FileSystem.DefaultGroupId" /> value is 
            used as the <see cref="T:Mono.Unix.Native.Stat.st_gid" /> field
            value returned by 
            <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" /> and 
            <see cref="M:Mono.Fuse.FileSystem.OnGetHandleStatus" /> when
            <see cref="T:Mono.Unix.Native.Stat.st_gid" /> is zero.
            This permits changing 
            <see cref="T:Mono.Unix.Native.Stat.st_gid" /> for all files
            within the file system if it isn't otherwise set.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="PathTimeout">
      <MemberSignature Language="C#" Value="public double PathTimeout { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Double</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Cache timeout for path names.</summary>
        <value>
          A <see cref="T:System.Double" /> containing the entry name timeout.
        </value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o entry_timeout=T</c> argument; it is <c>0.0</c>
            by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>entry_timeout</c> key, the value of which is the 
            entry timeout.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="DeletedPathTimeout">
      <MemberSignature Language="C#" Value="public double DeletedPathTimeout { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Double</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Cache timeout for deleted path names.</summary>
        <value>
          A <see cref="T:System.Double" /> containing the deleted path
          timeout.
        </value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o negative_timeout=T</c> argument; it is <c>0.0</c>
            by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>negative_timeout</c> key, the value of which is 
            the deleted entry timeout.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="AttributeTimeout">
      <MemberSignature Language="C#" Value="public double AttributeTimeout { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Double</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Cache timeout for attributes.</summary>
        <value>
          A <see cref="T:System.Double" /> containing the attribute timeout.
        </value>
        <remarks>
          <para>
            This property can be set with the 
            <c>-o attr_timeout=T</c> argument; it is <c>0.0</c>
            by default.
          </para>
          <para>
            If this property is set then 
            <see cref="P:Mono.Fuse.FileSystem.FuseOptions" /> will have an
            entry for the <c>attr_timeout</c> key, the value of which is the 
            default attribute timeout.
          </para>
        </remarks>
        <altmember cref="P:Mono.Fuse.FileSystem.FuseOptions" />
      </Docs>
    </Member>
    <Member MemberName="MountPoint">
      <MemberSignature Language="C#" Value="public string MountPoint { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.String</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>The directory to mount the file system over.</summary>
        <value>
          A <see cref="T:System.String" /> containing the directory to mount.
        </value>
        <remarks>
          <para>
            This property must be set before calling 
            <see cref="M:Mono.Fuse.FileSystem.Start" />, otherwise a 
            <see cref="M:Mono.Fuse.InvalidOperationException" /> will be
            generated.
          </para>
        </remarks>
        <altmember cref="M:Mono.Fuse.FileSystem.Start" />
      </Docs>
    </Member>
    <Member MemberName="MultiThreaded">
      <MemberSignature Language="C#" Value="public bool MultiThreaded { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
          Controls whether FUSE will invoke 
          <see cref="T:Mono.Fuse.FileSystem" /> methods in a multithreaded 
          manner.
        </summary>
        <value>
          A <see cref="T:System.Boolean" /> specifying whether FUSE should 
          invoke <see cref="T:Mono.Fuse.FileSystem" /> operations from 
          multiple threads.
        </value>
        <remarks>
          <para>This is <see langword="true" /> by default.</para>
          <para>You can pass <c>-s</c> to 
            <see cref="M:Mono.Fuse.FileSystem.ParseFuseArguments" />
            to disable multithreaded access, or set this property to 
            <see langword="false" />.
          </para>
          <para>
            This property <paramref name="must" /> be set before
            <see cref="M:Mono.Fuse.FileSystem.Start" /> is invoked if
            multithreaded access needs to be disabled.
          </para>
        </remarks>
      </Docs>
    </Member>
  </Members>
  <Docs>
    <summary>Interface to the Linux File System in User Space (FUSE) Library.</summary>
    <remarks>
      <para>The <see cref="T:Mono.Fuse.FileSystem" /> type facilitates the 
      implementation of FUSE file system programs.  Subclasses can override the 
      FileSystem methods to subscribe and respond to file system events, 
      allowing any other program to communicate with the FileSystem subclass 
      as if it were a file system.</para>
      <para>Overridable methods correspond to the following categories:</para>
      <list type="bullet">
        <item>
          <term>
            <paramref name="Directory" /> management methods: <see cref="M:Mono.Fuse.FileSystem.OnCreateDirectory" />, <see cref="M:Mono.Fuse.FileSystem.OnRemoveDirectory" />, <see cref="M:Mono.Fuse.FileSystem.OnOpenDirectory" />, <see cref="M:Mono.Fuse.FileSystem.OnReadDirectory" />, <see cref="M:Mono.Fuse.FileSystem.OnSynchronizeDirectory" />, <see cref="M:Mono.Fuse.FileSystem.OnReleaseDirectory" />.</term>
        </item>
        <item>
          <term>
            <paramref name="File" /> management methods: <see cref="M:Mono.Fuse.FileSystem.OnCreateSpecialFile" />, <see cref="M:Mono.Fuse.FileSystem.OnRemoveFile" />, <see cref="M:Mono.Fuse.FileSystem.OnTruncateFile" />.</term>
        </item>
        <item>
          <term>
            <paramref name="FileSystem" /> status methods: <see cref="M:Mono.Fuse.FileSystem.OnGetFileSystemStatus" />.</term>
        </item>
        <item>
          <term>
            <paramref name="Link" /> manipulation methods: <see cref="M:Mono.Fuse.FileSystem.OnCreateHardLink" />, <see cref="M:Mono.Fuse.FileSystem.OnCreateSymbolicLink" />, <see cref="M:Mono.Fuse.FileSystem.OnReadSymbolicLink" />.</term>
        </item>
        <item>
          <term>
            <paramref name="Handle" /> (opened file) management methods: <see cref="M:Mono.Fuse.FileSystem.OnCreateHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnOpenHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnReadHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnWriteHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnFlushHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnSynchronizeHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnTruncateHandle" />, <see cref="M:Mono.Fuse.FileSystem.OnGetHandleStatus" />, <see cref="M:Mono.Fuse.FileSystem.OnReleaseHandle" />.</term>
        </item>
        <item>
          <term>
            <paramref name="Path" /> (file and directory)  management methods: <see cref="M:Mono.Fuse.FileSystem.OnAccessPath" />, <see cref="M:Mono.Fuse.FileSystem.OnGetPathStatus" />, <see cref="M:Mono.Fuse.FileSystem.OnChangePathPermissions" />, <see cref="M:Mono.Fuse.FileSystem.OnChangePathOwner" />, <see cref="M:Mono.Fuse.FileSystem.OnChangePathTimes" />, <see cref="M:Mono.Fuse.FileSystem.OnGetPathExtendedAttribute" />, <see cref="M:Mono.Fuse.FileSystem.OnListPathExtendedAttributes" />, <see cref="M:Mono.Fuse.FileSystem.OnSetPathExtendedAttribute" />, <see cref="M:Mono.Fuse.FileSystem.OnRemovePathExtendedAttribute" />, <see cref="M:Mono.Fuse.FileSystem.OnRenamePath" />.</term>
        </item>
      </list>
      <block subset="none" type="overrides">
        <para>
  Inherited classes must be thread-safe by default.  If the inherited class cannot be thread safe, then the <see cref="P:Mono.Fuse.FileSystem.MultiThreaded" /> property should be set to <see langword="false" />, or the <c>-s</c> program argument should be passed to <see cref="M:Mono.Fuse.FileSystem.ParseFuseArguments" /> or the <see cref="C:Mono.Fuse.FileSystem(System.String[])" /> constructor.
  </para>
        <para>Not all methods need to be overridden.  If a method isn't overridden, then <see cref="F:Mono.Unix.Native.Errno.ENOSYS" /> will be returned to the calling program, and nothing will happen when that operation is requested.  For example, if you don't override <see cref="M:Mono.Fuse.FileSystem.OnCreateDirectory" />, then if a program attempts to call <see cref="M:Mono.Unix.Native.Syscall.mkdir" /> (e.g. through the <c>mkdir</c>(1) program) it will get an error, and the operation will not continue.</para>
        <para>Some methods need to be implemented in sets, or a <see cref="T:System.InvalidOperationException" /> will be generated from <see cref="M:Mono.Fuse.FileSystem.Start" />.  These sets are:</para>
        <list type="bullet">
          <item>
            <term>
              <see cref="M:Mono.Fuse.FileSystem.OnOpenDirectory" /> and <see cref="M:Mono.Fuse.FileSystem.OnReleaseDirectory" />.</term>
          </item>
        </list>
      </block>
    </remarks>
    <example>
      <para>The following sample file system will return the contents of <paramref name="SimpleFS.names" /> when the directory is read.</para>
      <code lang="C#">using System;
using System.Collections.Generic;
using Mono.Fuse;
using Mono.Unix.Native;

class SimpleFS : FileSystem {
  private List&lt;string&gt; names = new List&lt;string&gt; ();

  public SimpleFS (string[] args) : base (args)
  {
    names.Add ("/foo");
    names.Add ("/bar");
    names.Add ("/baz");
  }

  protected override Errno OnReadDirectory (string directory, OpenedPathInfo info,
      out IEnumerable&lt;DirectoryEntry&gt; names)
  {
    if (directory != "/") {
      names = null;
      return Errno.ENOENT;
    }
    names = ListNames (directory);
    return 0;
  }

  private IEnumerable&lt;DirectoryEntry&gt; ListNames (string directory)
  {
    foreach (string name in names) {
      yield return new DirectoryEntry (name.Substring (1));
    }
  }

  protected override Errno OnGetPathStatus (string path, ref Stat stbuf)
  {
    stbuf = new Stat ();
    if (path == "/") {
      stbuf.st_mode  = NativeConvert.FromUnixPermissionString ("dr-xr-xr-x");
      stbuf.st_nlink = 1;
      return 0;
    }
    if (!names.Contains (path))
      return Errno.ENOENT;
    stbuf.st_mode = NativeConvert.FromUnixPermissionString ("-r--r--r--");
    return 0;
  }

  public static void Main (string[] args)
  {
    using (SimpleFS fs = new SimpleFS (args)) {
      fs.Start ();
    }
  }
}</code>
      <para>The above program can be compiled as:</para>
      <code lang="sh">gmcs -r:Mono.Fuse.dll -r:Mono.Posix.dll SimpleFS.cs</code>
      <para>
      The resulting program can then be used by executing it and using
      normal shell programs to interact with it.
    </para>
      <code lang="sh">$ mono SimpleFS.exe mountpoint &amp;
$ ls -1 mountpoint
bar
baz
foo</code>
      <para>
      The program can be terminated by unmounting 
      <paramref name="mountpoint" /> by using the <c>fusermount</c> program:
    </para>
      <code lang="sh">fusermount -u mountpoint</code>
    </example>
  </Docs>
</Type>
